package juanca.mole;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import ClasesExtras.GetIpAddress;
import ClasesExtras.handlerAlertMessage;
import ClasesExtras.handlerDb;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;

public class TipoProceso extends Activity {

	private String NumLote;

	private String URL_VALIDAR_LOTE;
	public static final String STRING_EMPTY = "";
	public ProgressDialog progressDialog;

	private handlerAlertMessage manejadorMensajes;
	private Activity activity;
	private TipoProceso self = this;

	public String getNumLote() {
		return NumLote;
	}

	public void setNumLote(String numLote) {
		NumLote = numLote;
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_tipo_proceso);

		manejadorMensajes = new handlerAlertMessage();
		activity = this;

	}

	@Override
	protected void onStart() {
		super.onStart();
		GetIpAddress direccion = new GetIpAddress(this);

		if (direccion.getDireccion() != null) {
			URL_VALIDAR_LOTE = direccion.getDireccion() + "/validar_lote.json";
		} else {
			new AlertDialog.Builder(this)
					.setIcon(android.R.drawable.ic_dialog_alert)
					.setTitle(R.string.tituloAlerta)
					.setMessage(R.string.msjErSinDireccion)
					.setPositiveButton(R.string.btnAceptar,
							new DialogInterface.OnClickListener() {// un
								// listener que al pulsar, cierre la
								// aplicacion
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									// Salir
									Intent intent = new Intent();
									intent.setClass(activity, Etapas.class);
									startActivity(intent);
								}
							}).show();
		}
	}

	public void goNuevoProceso(View view) {
		Intent intent = new Intent();
		intent.setClass(this, NuevoProceso.class);
		startActivity(intent);
	}

	// mensaje alerta para ingresar el numero de lote
	public void irMensajeRegistro(View v) {

		AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(this);
		LayoutInflater inflater = this.getLayoutInflater();
		final View Inflator = inflater.inflate(R.layout.ingresar_lote, null);
		final EditText lote = (EditText) Inflator.findViewById(R.id.etLote);

		mensajeEmergente.setTitle(R.string.msjLote);
		mensajeEmergente.setView(Inflator);
		mensajeEmergente.setPositiveButton(R.string.btnReanudar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						setNumLote(lote.getText().toString());

						if (!self.getNumLote().equals(STRING_EMPTY)) {
							getWindow()
									.setSoftInputMode(
											WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

							progressDialog = new ProgressDialog(self);
							progressDialog.setMessage(self
									.getString(R.string.PbMsjReanudandoProceso));
							progressDialog.setCancelable(true);
							progressDialog.show();

							new Thread(new Runnable() {
								@Override
								public void run() {
									Log.i("EnviarLote", "entra enviar lote");
									self.enviarLote();

								}
							}).start();

						} else {
							// msj hace falta lote
							manejadorMensajes.alertMessageOneButton(activity,
									R.string.tituloAlerta,
									R.string.msjLoteVacio, R.string.btnAceptar);
						}

					}
				});
		mensajeEmergente.setNegativeButton(R.string.btnCancelar,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {

					}
				});
		mensajeEmergente.create();
		mensajeEmergente.show();

	}

	public void enviarLote() {
		HttpClient httpClient = new DefaultHttpClient();
		// URL del servidor para guardar los datos de validar lote
		HttpPost post = new HttpPost(URL_VALIDAR_LOTE);

		try {
			Log.i("EnviarLote", "Entra al Try");
			// Construimos el objeto cliente en formato JSON
			JSONObject dato = new JSONObject();

			// se almacenan los datos capturados por los campos de texto en
			// el objeto JSON para enviarlo al servidor.
			dato.put("no_lote", this.getNumLote());

			StringEntity entity = new StringEntity(dato.toString());
			post.setHeader("Content-Type", "application/json; chartset=UTF-8");
			post.setHeader("Accept", "application/json");
			post.setEntity(entity);
			HttpResponse resp = httpClient.execute(post);
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					resp.getEntity().getContent(), "UTF-8"));
			String json = reader.readLine();
			JSONTokener tokener = new JSONTokener(json);
			JSONArray finalResult = new JSONArray(tokener);

			Log.w("EnviarLote", finalResult.toString());

			if (finalResult.getJSONObject(0).getString("validar")
					.equals("true")
					&& finalResult.getJSONObject(0).getString("estado")
							.equals("iniciado")) {

				String idProceso = finalResult.getJSONObject(0).getString("id");
				String idEmpleado = finalResult.getJSONObject(0).getString(
						"empleado_id");
				String idProducto = finalResult.getJSONObject(0).getString(
						"producto");
				String nombreProducto = finalResult.getJSONObject(0).getString(
						"nombre_producto");
				Log.i("EnviarLote", "idProceso= " + idProceso);
				Log.i("EnviarLote", "idEmpleado= " + idEmpleado);
				Log.i("EnviarLote", "idProducto= " + idProducto);
				Log.i("EnviarLote", "nombreProducto= " + nombreProducto);

				handlerDb dataBase = new handlerDb(this);
				dataBase.abrir();
				if (dataBase.leerTabla2("id_proceso") == null) {
					dataBase.registrarTabla2(this.getNumLote(),
							Integer.parseInt(idEmpleado),
							Integer.parseInt(idProceso),
							Integer.parseInt(idProducto), nombreProducto);
					dataBase.registrarTabla4("old");
					dataBase.registrarTabla5("false");
					dataBase.registrarTabla6("false");

					Log.i("EnviarLote", "alamcena en la base de datos local");
				} else {
					int result;
					result = dataBase.eliminarTabla2();
					int resulTb4 = dataBase.eliminarTabla4();
					int resulTb5 = dataBase.eliminarTabla5();
					int resulTb6 = dataBase.eliminarTabla6();
					if (result >= 0) {
						dataBase.registrarTabla2(this.getNumLote(),
								Integer.parseInt(idEmpleado),
								Integer.parseInt(idProceso),
								Integer.parseInt(idProducto), nombreProducto);
						if (resulTb4 >= 0) {
							dataBase.registrarTabla4("old");
						}
						if (resulTb5 >= 0) {
							dataBase.registrarTabla5("false");
						}
						if (resulTb6 >= 0) {
							dataBase.registrarTabla6("false");
						}

						Log.i("EnviarLote", "elimina el dato");
					}
				}

				dataBase.cerrar();

				Log.i("EnviarLote", "el servidor me retorna true");
				this.setNumLote(null);

				Log.i("EnviarLote", "esta antes del hilo de msj exitoso");
				// mensaje de respuesta del servidor
				runOnUiThread(new Runnable() {
					public void run() {
						progressDialog.dismiss();
						// lo lleva a la vista control manejo fruver
						Intent intent = new Intent();
						intent.setClass(activity, CtrlManejoFruver.class);
						intent.putExtra("processType", "10");
						startActivity(intent);

						Log.i("EnviarLote", "Finaliza correctamente");

					}
				});

			} else {
				runOnUiThread(new Runnable() {
					public void run() {

						progressDialog.dismiss();
						AlertDialog.Builder mensajeEmergente = new AlertDialog.Builder(
								activity);
						mensajeEmergente.setTitle(R.string.tituloError);
						mensajeEmergente.setMessage(R.string.msjLoteInvalido);
						mensajeEmergente.setNeutralButton(R.string.btnAceptar,
								new DialogInterface.OnClickListener() {

									public void onClick(DialogInterface dialog,
											int which) {

									}
								});

						mensajeEmergente.create();
						mensajeEmergente.show();
						Log.w("EnviarLote",
								"el servidor no retorna true y esta en el mensaje en pantalla");
					}
				});
			}

		} catch (Exception ex) {

			runOnUiThread(new Runnable() {
				public void run() {

					progressDialog.dismiss();
					manejadorMensajes.alertMessageOneButton(activity,
							R.string.tituloError, R.string.msjERConexionEnviar,
							R.string.btnAceptar);

				}
			});

			Log.e("EnviarLote", "entro al catch, Error: "
					+ ex.fillInStackTrace().toString());
		}

	}

	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {

		if (keyCode == KeyEvent.KEYCODE_BACK) {

			// Salir
			Intent intent = new Intent();
			intent.setClass(activity, Etapas.class);
			startActivity(intent);
			return true;

		}
		// para las demas cosas, se reenvia el evento al listener habitual
		return super.onKeyUp(keyCode, event);
	}

}
